package com.atguigu.test6.test61;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * @author 路飞
 * @date 2024/4/10 11:10
 * @description 题目：有一个无序数组，要求对其进行排序并输出，现输入一个数，要求按原来的规律将它插入数组中。
 */
public class Test5 {
    public static void main(String[] args) {
        int[] arr = new int[]{0,8,7,5,9,1,2,4,3,12};
        selectSoft(arr);
        System.out.println("排序后的数组为：" + Arrays.toString(arr));

        // 这个是要插入的一个数
        int insertNum = 6;
        int[] newArr = insertNum(arr, insertNum);
        System.out.println("插入元素之后的数组为" + Arrays.toString(newArr));
    }

    /**
     * @description 有一种死办法，就是插入元素的时候，先对数组进行排序，这样子就知道了排序规则。
     *
     * 还有一种就是提前排序好，这样子就不知道数组的排序规则是啥了。
     */
    public static int[] insertNum(int[] arr, int num) {
        int[] newArr = new int[arr.length + 1];
        // 获取排序规则，如果sortRule为1，表示数组的排序规则是升序，否则就是降序。
        int sortRule = arr[1] > arr[0] ? 1 : 0;

        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            // 升序 1,2,3,4,5
            if (sortRule == 1) {
                if (num < arr[i]) {
                    index = i;
                    break;
                } else {
                    index = arr.length;
                }
            } else {
                // 降序 5,4,3,2,1
                if (num > arr[i]) {
                    index = i;
                    break;
                } else {
                    index = arr.length;
                }
            }
        }
        // 复制前半段
        System.arraycopy(arr, 0, newArr, 0, index);
        // 复制后半段
        System.arraycopy(arr, index, newArr, index + 1, arr.length - index);
        // 在对应索引处，插入需要插入的值
        newArr[index] = num;
        return newArr;
    }

    public static void selectSoft(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int index = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[index]) {
                    index = j;
                }
            }
            if (index != i) {
                int temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
            }
        }
    }
}
